/**
 * Universita' degli Studi di Palermo, 2010-11, License GNU GPL 3 (http://www.gnu.org/licenses/gpl.html)
 */
package org.unipa.botplatform.model;

import java.util.Map;

/**
 * Bot interface is designed to offer a simple way to manage specific implementations. 
 * <br> We assume that a Bot:
 * <li> has a name,
 * <li> starts and stops dialogue sessions,
 * <li> has zero or more properties (possibly relative to a session - this is implementation specific).
 * <br> <br>
 * If you want to add the management of a new kind of bot you have to simply implement a class for this
 * interface.
 * 
 * @author Giuseppe Miceli
 */
public interface Bot {

	// BOT NAME SETTER AND GETTER
	public String getName();
	public void setName(String botName);

	// DIALOGUE MANAGEMENT
	public String newSession();
	public Object startInteraction(String sessionId);
	public Object startInteraction(String sessionId, Object initialization);
	public Object interactWithBot(String sessionId, Object interaction);
	public Object closeSession(String sessionId);

	// PROPERTIES MANAGEMENT
	public Map<Object, Object> getProperties(String sessionId);
	public Object getProperty(String sessionId, Object propertyName);
	public Object setProperty(String sessionId, Object propertyName, Object propertyValue);	
}